import 'package:toatool/src/data/remote/app_exceptions.dart';

import 'view_state_controller.dart';

/// 基于ViewStateController
abstract class ViewStateListController<T> extends ViewStateController {
  /// 页面数据
  List<T> list = [];

  // 刷新
  Future<void> mitRefresh({bool init = false}) async {
    try {
      var data = await loadData();
      if (data.isEmpty) {
        list.clear();
        setEmpty();
      } else {
        onCompleted(data);
        list.clear();
        list.addAll(data);
        setIdle();
      }
      update();
    } on AppException catch (e, s) {
      if (init == true) {
        list.clear();
      }
      setError(e, s, message: e.message);
      update();
    } catch (e, s) {
      if (init == true) {
        list.clear();
      }
      setError(e, s, message: '出错了');
      update();
    }
  }

  // 加载数据
  Future<List<T>> loadData();

  // 完成
  void onCompleted(List<T> data) {}
}
